package com.jokins.common.constant;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public enum AccountEnum {
    // 枚举实例，包含中文和英文名称
    REGISTERED_MEMBERS("注册会员", "Registered Members"),
    BETA_TESTERS("内测会员", "Beta Testers"),
    REGULAR_MEMBERS("普通会员", "Regular Members"),
    PREMIUM_MEMBERS("高级会员", "Premium Members"),
    EXCLUSIVE_MEMBERS("尊享会员", "Exclusive Members"),
    SILVER_MEMBERS("白银会员", "Silver Members"),
    GOLD_MEMBERS("黄金会员", "Gold Members"),
    DIAMOND_MEMBERS("钻石会员", "Diamond Members"),
    INVITED_MEMBERS("邀请会员", "Invited Members"),
    STUDENT_MEMBERS("学生会员", "Student Members"),
    CORPORATE_MEMBERS("企业会员", "Corporate Members"),
    EVENT_MEMBERS("活动会员", "Event Members");

    // 中文名称
    private final String chineseName;
    // 英文名称
    private final String englishName;

    // 存储英文名称到枚举实例的映射，用于快速查找
    private static final Map<String, AccountEnum> ENGLISH_NAME_MAP = new HashMap<>();

    // 静态代码块，初始化映射
    static {
        for (AccountEnum accountEnum : AccountEnum.values()) {
            ENGLISH_NAME_MAP.put(accountEnum.englishName, accountEnum);
        }
    }

    /**
     * 构造函数，初始化中文和英文名称
     *
     * @param chineseName 中文名称
     * @param englishName 英文名称
     */
    AccountEnum(String chineseName, String englishName) {
        this.chineseName = chineseName;
        this.englishName = englishName;
    }

    /**
     * 获取中文名称
     *
     * @return 中文名称
     */
    public String getChineseName() {
        return chineseName;
    }

    /**
     * 获取英文名称
     *
     * @return 英文名称
     */
    public String getEnglishName() {
        return englishName;
    }

    /**
     * 根据中文名称查找对应的枚举实例
     *
     * @param name 要查找的中文名称
     * @return 对应的枚举实例的 Optional，如果未找到则返回 Optional.empty()
     */
    public static Optional<AccountEnum> fromChineseName(String name) {
        return Optional.ofNullable(ENGLISH_NAME_MAP.get(name));
    }

    /**
     * 根据英文名称获取中文名称
     *
     * @param englishName 要查找的英文名称
     * @return 对应的中文名称的 Optional，如果未找到则返回 Optional.empty()
     */
    public static Optional<String> getChineseNameByEnglish(String englishName) {
        return Optional.ofNullable(ENGLISH_NAME_MAP.get(englishName))
                .map(AccountEnum::getChineseName);
    }
}